#include<bits/stdc++.h>
#define N 200005
using namespace std;
int id,n;
int fa[N];
int lst;
int f[N][2];
set<pair<int,int> > ans,p[N][2];
int mx(int x){
    int res=max(f[x][0],f[x][1]);
    if(p[x][0].size()>=2) res=max(res,-(*p[x][0].begin()).first-(*next(p[x][0].begin())).first+1);
    if(p[x][0].size()>=3) res=max(res,-(*p[x][0].begin()).first-(*next(p[x][0].begin())).first+(*next(next(p[x][0].begin()))).first+1);
    int A=0;
    for(auto i=p[x][0].begin();i!=p[x][0].end();++i){
        A++;
        int B=0;
        for(auto j=p[x][1].begin();j!=p[x][1].end();++j){
            B++;
            if((*i).second!=(*j).second) res=max(res,-(*i).first-(*j).first);
            if(B==2) break;
        }
        if(A==2) break;
    }
    return res;
}
signed main(){
    freopen("forest.in","r",stdin);
    freopen("forest.out","w",stdout);
    scanf("%d %d",&id,&n);
    f[1][0]=1;f[1][1]=-1e9;
    ans.insert({1,1});
    for(int i=2,x;i<=n;i++){
        scanf("%d",&x);
        x^=lst;
        fa[i]=x;
        f[i][0]=1;f[i][1]=-1e9;
        p[x][0].insert({-1,i});
        p[x][1].insert({1e9,i});
        ans.insert({1,i});
        int o=i;
        while(x){
            ans.erase({mx(x),x});
            if(fa[x]){
                p[fa[x]][0].erase({-f[x][0],x});
                p[fa[x]][1].erase({-f[x][1],x});
            }
            f[x][0]=1;f[x][1]=-1e9;
            if(p[x][0].size()) f[x][0]=max(f[x][0],-(*p[x][0].begin()).first+1);
            if(p[x][1].size()) f[x][1]=max(f[x][1],-(*p[x][1].begin()).first+1);
            if(p[x][0].size()>=2) f[x][1]=max(f[x][1],-(*p[x][0].begin()).first-(*next(p[x][0].begin())).first+1);
            ans.insert({mx(x),x});
            if(fa[x]){
                p[fa[x]][0].insert({-f[x][0],x});
                p[fa[x]][1].insert({-f[x][1],x});
            }
            o=x;x=fa[x];
        }
        lst=(*ans.rbegin()).first-1;
        printf("%d\n",lst);
    }
    return 0;
}